{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "! pip install -U scikit-learn"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      ".. _iris_dataset:\n",
      "\n",
      "Iris plants dataset\n",
      "--------------------\n",
      "\n",
      "**Data Set Characteristics:**\n",
      "\n",
      "    :Number of Instances: 150 (50 in each of three classes)\n",
      "    :Number of Attributes: 4 numeric, predictive attributes and the class\n",
      "    :Attribute Information:\n",
      "        - sepal length in cm\n",
      "        - sepal width in cm\n",
      "        - petal length in cm\n",
      "        - petal width in cm\n",
      "        - class:\n",
      "                - Iris-Setosa\n",
      "                - Iris-Versicolour\n",
      "                - Iris-Virginica\n",
      "                \n",
      "    :Summary Statistics:\n",
      "\n",
      "    ============== ==== ==== ======= ===== ====================\n",
      "                    Min  Max   Mean    SD   Class Correlation\n",
      "    ============== ==== ==== ======= ===== ====================\n",
      "    sepal length:   4.3  7.9   5.84   0.83    0.7826\n",
      "    sepal width:    2.0  4.4   3.05   0.43   -0.4194\n",
      "    petal length:   1.0  6.9   3.76   1.76    0.9490  (high!)\n",
      "    petal width:    0.1  2.5   1.20   0.76    0.9565  (high!)\n",
      "    ============== ==== ==== ======= ===== ====================\n",
      "\n",
      "    :Missing Attribute Values: None\n",
      "    :Class Distribution: 33.3% for each of 3 classes.\n",
      "    :Creator: R.A. Fisher\n",
      "    :Donor: Michael Marshall (MARSHALL%PLU@io.arc.nasa.gov)\n",
      "    :Date: July, 1988\n",
      "\n",
      "The famous Iris database, first used by Sir R.A. Fisher. The dataset is taken\n",
      "from Fisher's paper. Note that it's the same as in R, but not as in the UCI\n",
      "Machine Learning Repository, which has two wrong data points.\n",
      "\n",
      "This is perhaps the best known database to be found in the\n",
      "pattern recognition literature.  Fisher's paper is a classic in the field and\n",
      "is referenced frequently to this day.  (See Duda & Hart, for example.)  The\n",
      "data set contains 3 classes of 50 instances each, where each class refers to a\n",
      "type of iris plant.  One class is linearly separable from the other 2; the\n",
      "latter are NOT linearly separable from each other.\n",
      "\n",
      ".. topic:: References\n",
      "\n",
      "   - Fisher, R.A. \"The use of multiple measurements in taxonomic problems\"\n",
      "     Annual Eugenics, 7, Part II, 179-188 (1936); also in \"Contributions to\n",
      "     Mathematical Statistics\" (John Wiley, NY, 1950).\n",
      "   - Duda, R.O., & Hart, P.E. (1973) Pattern Classification and Scene Analysis.\n",
      "     (Q327.D83) John Wiley & Sons.  ISBN 0-471-22361-1.  See page 218.\n",
      "   - Dasarathy, B.V. (1980) \"Nosing Around the Neighborhood: A New System\n",
      "     Structure and Classification Rule for Recognition in Partially Exposed\n",
      "     Environments\".  IEEE Transactions on Pattern Analysis and Machine\n",
      "     Intelligence, Vol. PAMI-2, No. 1, 67-71.\n",
      "   - Gates, G.W. (1972) \"The Reduced Nearest Neighbor Rule\".  IEEE Transactions\n",
      "     on Information Theory, May 1972, 431-433.\n",
      "   - See also: 1988 MLC Proceedings, 54-64.  Cheeseman et al\"s AUTOCLASS II\n",
      "     conceptual clustering system finds 3 classes in the data.\n",
      "   - Many, many more ...\n"
     ]
    }
   ],
   "source": [
    "from sklearn.datasets import load_iris\n",
    "data = load_iris()\n",
    "# 查看数据描述\n",
    "print(data.DESCR)\n",
    "x = data.data\n",
    "y = data.target"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "       0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
       "       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
       "       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n",
       "       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n",
       "       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-1 {color: black;}#sk-container-id-1 pre{padding: 0;}#sk-container-id-1 div.sk-toggleable {background-color: white;}#sk-container-id-1 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-1 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-1 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-1 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-1 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-1 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-1 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-1 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-1 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-1 div.sk-item {position: relative;z-index: 1;}#sk-container-id-1 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-1 div.sk-item::before, #sk-container-id-1 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-1 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-1 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-1 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-1 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-1 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-1 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-1 div.sk-label-container {text-align: center;}#sk-container-id-1 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-1 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LinearRegression()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" checked><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">LinearRegression</label><div class=\"sk-toggleable__content\"><pre>LinearRegression()</pre></div></div></div></div></div>"
      ],
      "text/plain": [
       "LinearRegression()"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn import linear_model\n",
    "regr = linear_model.LinearRegression()\n",
    "regr.fit(x, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-0.08254936])"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "regr.predict([[5.1, 3.5, 1.4, 0.2]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.9736842105263158"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.pipeline import make_pipeline\n",
    "from sklearn.datasets import load_iris\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.metrics import accuracy_score\n",
    "# create a pipeline object\n",
    "pipe = make_pipeline(\n",
    "    StandardScaler(),\n",
    "    LogisticRegression()\n",
    ")\n",
    "# load the iris dataset and split it into train and test sets\n",
    "X, y = load_iris(return_X_y=True)\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)\n",
    "# fit the whole pipeline\n",
    "pipe.fit(X_train, y_train)\n",
    "# we can now use it like any other estimator\n",
    "accuracy_score(pipe.predict(X_test), y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-35.0\n",
      "-35.0\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "\n",
    "w=np.array([1.,2.5,-3.3])\n",
    "b=4\n",
    "x=np.array([10,20,30])\n",
    "\n",
    "print(np.sum(w*x)+b)\n",
    "\n",
    "print(np.dot(w,x)+b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(['MedInc',\n",
       "  'HouseAge',\n",
       "  'AveRooms',\n",
       "  'AveBedrms',\n",
       "  'Population',\n",
       "  'AveOccup',\n",
       "  'Latitude',\n",
       "  'Longitude'],\n",
       " ['MedHouseVal'])"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.datasets import fetch_california_housing\n",
    "housing= fetch_california_housing()\n",
    "\n",
    "housing.feature_names,housing.target_names"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      ".. _california_housing_dataset:\n",
      "\n",
      "California Housing dataset\n",
      "--------------------------\n",
      "\n",
      "**Data Set Characteristics:**\n",
      "\n",
      "    :Number of Instances: 20640\n",
      "\n",
      "    :Number of Attributes: 8 numeric, predictive attributes and the target\n",
      "\n",
      "    :Attribute Information:\n",
      "        - MedInc        median income in block group\n",
      "        - HouseAge      median house age in block group\n",
      "        - AveRooms      average number of rooms per household\n",
      "        - AveBedrms     average number of bedrooms per household\n",
      "        - Population    block group population\n",
      "        - AveOccup      average number of household members\n",
      "        - Latitude      block group latitude\n",
      "        - Longitude     block group longitude\n",
      "\n",
      "    :Missing Attribute Values: None\n",
      "\n",
      "This dataset was obtained from the StatLib repository.\n",
      "https://www.dcc.fc.up.pt/~ltorgo/Regression/cal_housing.html\n",
      "\n",
      "The target variable is the median house value for California districts,\n",
      "expressed in hundreds of thousands of dollars ($100,000).\n",
      "\n",
      "This dataset was derived from the 1990 U.S. census, using one row per census\n",
      "block group. A block group is the smallest geographical unit for which the U.S.\n",
      "Census Bureau publishes sample data (a block group typically has a population\n",
      "of 600 to 3,000 people).\n",
      "\n",
      "A household is a group of people residing within a home. Since the average\n",
      "number of rooms and bedrooms in this dataset are provided per household, these\n",
      "columns may take surprisingly large values for block groups with few households\n",
      "and many empty houses, such as vacation resorts.\n",
      "\n",
      "It can be downloaded/loaded using the\n",
      ":func:`sklearn.datasets.fetch_california_housing` function.\n",
      "\n",
      ".. topic:: References\n",
      "\n",
      "    - Pace, R. Kelley and Ronald Barry, Sparse Spatial Autoregressions,\n",
      "      Statistics and Probability Letters, 33 (1997) 291-297\n",
      "\n"
     ]
    }
   ],
   "source": [
    "print(housing.DESCR)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "20640"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.datasets import fetch_california_housing\n",
    "X,y = fetch_california_housing(return_X_y=True)\n",
    "len(X)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x7f71415c63d0>"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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5uZm3XTTTRo7diyvIQLh6NGj+uIXvyjDMLR27VrbX+/rdcno0aNVXl6ud999t9/H3333XSUSCT+XUhIWLlyoxx9/XE8//bTGjRtX7OWEyvPPP6+9e/dq6tSpGjJkiIYMGaLNmzfrhz/8oYYMGaJUKlXsJQZeXV2dGhoa+n3stNNO01tvvVWkFYXPP/3TP+mWW27Rl770JZ1++un68pe/rJtvvlmrV68u9tJCy9xL2GcKZwYYb775pjZu3Gj7FEPyOcgYNmyYzjnnHD311FO9H0un03rqqac0ffp0P5cSaoZhaOHChXrooYe0adMm1dfXF3tJoXPJJZdo165dam5u7v117rnnat68eWpublZ5eXmxlxh4M2bMGFQ6/eqrr+rEE08s0orC5/Dhwyor6//PcHl5udLpdJFWFH719fVKJBL99plkMqnnnnuOfcYGM8B47bXX9OSTT6q2ttbR9/H9umTx4sW65pprdO6552ratGn6/ve/r0OHDunaa6/1eymhtWDBAt1///165JFHVFVV1XvPGI/HNXz48CKvLhyqqqoG5bCMHDlStbW15LZYdPPNN+uTn/ykvv3tb+uLX/yiduzYoXvuuUf33HNPsZcWGnPmzNG3vvUtTZgwQVOmTNELL7yg733ve7ruuuuKvbRA++CDD/T666/3/r6trU3Nzc2qqanRhAkTdNNNN+mb3/ymJk+erPr6ei1btkxjx47VlVdeWbxFB0yu17Curk5/9Vd/paamJj3++ONKpVK9+0xNTY2GDRtm/Ykc17wU4Ec/+pExYcIEY9iwYca0adOM7du3F2MZoSUp469777232EsLNUpY7XvssceMxsZGo6Kiwjj11FONe+65p9hLCpVkMmksWrTImDBhglFZWWmcfPLJxj//8z8b3d3dxV5aoD399NMZ/w285pprDMPoKWNdtmyZcfzxxxsVFRXGJZdcYrzyyivFXXTA5HoN29rasu4zTz/9tK3nYdQ7AADwBLNLAACAJwgyAACAJwgyAACAJwgyAACAJwgyAACAJwgyAACAJwgyAACAJwgyAACAJwgyAACAJwgyAACAJwgyAACAJwgyAACAJ/4/6E3yRSOyxowAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "MedInc=list(map(lambda x:x[0],X))\n",
    "plt.scatter(MedInc[:150],y[:150])\n",
    "# MedInc"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 200x200 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "\n",
    "plt.style.use('_mpl-gallery')\n",
    "\n",
    "# make the data\n",
    "np.random.seed(3)\n",
    "x = 4 + np.random.normal(0, 2, 24)\n",
    "y = 4 + np.random.normal(0, 2, len(x))\n",
    "# size and color:\n",
    "sizes = np.random.uniform(15, 80, len(x))\n",
    "colors = np.random.uniform(15, 80, len(x))\n",
    "\n",
    "# plot\n",
    "fig, ax = plt.subplots()\n",
    "\n",
    "ax.scatter(x, y, s=sizes, c=colors, vmin=0, vmax=100)\n",
    "\n",
    "ax.set(xlim=(0, 8), xticks=np.arange(1, 8),\n",
    "       ylim=(0, 8), yticks=np.arange(1, 8))\n",
    "\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "base",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.3"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
